Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Lucid (programming language)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Lucid_(programming_language)"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Lucid_programming_language rootpage-Lucid_programming_language skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Lucid (programming language)</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">For the Lisp software company, see <a href="Lucid_Inc." title="Lucid Inc.">Lucid Inc.</a></div>
<style data-mw-deduplicate="TemplateStyles:r1251242444">
/* start https://en.wikipedia.org/ */


.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style>
<style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */


.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}


/* end https://en.wikipedia.org/ */
</style><table class="infobox vevent"><tbody><tr><th colspan="2" class="infobox-above" style="background-color:#e0e0e0;">Lucid</th></tr><tr><th scope="row" class="infobox-label"><a href="Programming_paradigm" title="Programming paradigm">Paradigm</a></th><td class="infobox-data"><a href="Dataflow_programming" title="Dataflow programming">Dataflow</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Software_design" title="Software design">Designed&nbsp;by</a></th><td class="infobox-data">Edward A. Ashcroft<br>William W. Wadge</td></tr><tr><th scope="row" class="infobox-label">First&nbsp;appeared</th><td class="infobox-data">1976</td></tr><tr><th scope="row" class="infobox-label"><a href="Type_system" title="Type system">Typing discipline</a></th><td class="infobox-data">Typeless</td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Major <a href="Programming_language_implementation" title="Programming language implementation">implementations</a></th></tr><tr><td colspan="2" class="infobox-full-data">pLucid, GIPSY</td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;"><a href="Programming_language#Dialects,_flavors_and_implementations" title="Programming language">Dialects</a></th></tr><tr><td colspan="2" class="infobox-full-data">Granular Lucid, Indexical Lucid, Tensor Lucid, Forensic Lucid, Lucx, JOOIPL</td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Influenced by</th></tr><tr><td colspan="2" class="infobox-full-data"><a href="ISWIM" title="ISWIM">ISWIM</a></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Influenced</th></tr><tr><td colspan="2" class="infobox-full-data"><a href="SISAL" title="SISAL">SISAL</a>, <a href="PureData" class="mw-redirect" title="PureData">PureData</a>, <a href="Lustre_(programming_language)" title="Lustre (programming language)">Lustre</a></td></tr></tbody></table>
<p><b>Lucid</b> is a <a href="Dataflow_programming" title="Dataflow programming">dataflow programming</a> language designed to experiment with non-<a href="Von_Neumann_architecture" title="Von Neumann architecture">von Neumann</a> programming models. It was designed by Bill Wadge and Ed Ashcroft and described in the 1985 book <i>Lucid, the Dataflow Programming Language</i>.<sup id="cite_ref-book_1-0" class="reference"><a href="#cite_note-book-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>pLucid was the first <a href="Interpreter_(computing)" title="Interpreter (computing)">interpreter</a> for Lucid.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Model">Model</h2></div>
<p>Lucid uses a demand-driven model for data computation. Each statement can be understood as an equation defining a network of processors and communication lines between them through which data flows. Each <a href="Variable_(computer_science)" title="Variable (computer science)">variable</a> is an infinite stream of values and every function is a filter or a transformer. <a href="Iteration" title="Iteration">Iteration</a> is simulated by 'current' values and 'fby' (read as 'followed by') operator allowing composition of streams.
</p><p>Lucid is based on an <a href="Algebra" title="Algebra">algebra</a> of histories, a history being an infinite sequence of data items. Operationally, a history can be thought of as a record of the changing values of a variable, history operations such as first and next can be understood in ways suggested by their names. Lucid was originally conceived as a disciplined, mathematically pure, single-assignment language, in which verification would be simplified. However, the <a href="Dataflow" title="Dataflow">dataflow</a> interpretation has been an important influence on the direction in which Lucid has evolved.<a rel="nofollow" class="external autonumber" href="https://web.archive.org/web/20110514103454/http://hopl.murdoch.edu.au/showlanguage2.prx?exp=960">[1]</a>
</p>
<div class="mw-heading mw-heading2"><h2 id="Details">Details</h2></div>
<p>In Lucid (and other <a href="Dataflow" title="Dataflow">dataflow</a> languages) an expression that contains a variable that has not yet been <a href="Free_variables_and_bound_variables" title="Free variables and bound variables">bound</a> waits until the variable has been bound, before proceeding. An expression like <code>x + y</code> will wait until both x and y are bound before returning with the output of the expression. An important consequence of this is that explicit logic for updating related values is avoided, which results in substantial code reduction, compared to mainstream languages.
</p><p>Each variable in Lucid is a stream of values. An expression <code>n = 1 fby n + 1</code> defines a stream
using the operator 'fby' (a <a href="Mnemonic" title="Mnemonic">mnemonic</a> for "followed by"). fby defines what comes after the previous
expression. (In this instance the stream produces 1,2,3,...).
The values in a stream can be addressed by these operators (assuming x is the variable being used):
</p><p><code>'first x'</code> - fetches the first value in the stream x,
</p><p><code>'x'</code> - the current value of the stream,
</p><p><code>'next x'</code> - fetches the next value in the stream.
</p><p><code>'asa'</code> - an operator that does some thing 'as soon as' the condition given becomes true.
</p><p><code>'x upon p'</code> - upon is an operator that repeats the old value of the stream x, and updates to the new values only when the stream p makes a <code>true</code> value available. (It serves to slow down the stream x)
i.e.: <code>x upon p</code> is the stream x with new values appearing upon the truth of p.
</p><p>The computation is carried out by defining filters or transformation functions that act on these time-varying streams of data.
</p>
<div class="mw-heading mw-heading2"><h2 id="Examples">Examples</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Factorial">Factorial</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Factorial" title="Factorial">Factorial</a></div>
<div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre> <span class="s s-Atom">fac</span>
<span class="s s-Atom">where</span>
<span class="s s-Atom">n</span> <span class="o">=</span> <span class="mi">0</span> <span class="nf">fby</span> <span class="p">(</span><span class="s s-Atom">n</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
<span class="s s-Atom">fac</span> <span class="o">=</span> <span class="mi">1</span> <span class="nf">fby</span> <span class="p">(</span> <span class="s s-Atom">fac</span> <span class="o">*</span> <span class="p">(</span><span class="s s-Atom">n</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="p">);</span>
<span class="s s-Atom">end</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Fibonacci_sequence">Fibonacci sequence</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Fibonacci_sequence" title="Fibonacci sequence">Fibonacci sequence</a></div>
<div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre> <span class="s s-Atom">fib</span>
<span class="s s-Atom">where</span>
<span class="s s-Atom">fib</span> <span class="o">=</span> <span class="mi">0</span> <span class="nf">fby</span> <span class="p">(</span> <span class="mi">1</span> <span class="s s-Atom">fby</span> <span class="s s-Atom">fib</span> <span class="o">+</span> <span class="s s-Atom">next</span> <span class="s s-Atom">fib</span> <span class="p">);</span>
<span class="s s-Atom">end</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Total_of_a_Sequence">Total of a Sequence</h3></div>
<div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre> <span class="s s-Atom">total</span>
<span class="s s-Atom">where</span>
<span class="s s-Atom">total</span> <span class="o">=</span> <span class="mi">0</span> <span class="s s-Atom">fby</span> <span class="s s-Atom">total</span> <span class="o">+</span> <span class="s s-Atom">x</span>
<span class="s s-Atom">end</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Running_average">Running average</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Running_average" class="mw-redirect" title="Running average">Running average</a></div>
<div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre> <span class="s s-Atom">running_avg</span>
<span class="s s-Atom">where</span>
<span class="s s-Atom">sum</span> <span class="o">=</span> <span class="nf">first</span><span class="p">(</span><span class="s s-Atom">input</span><span class="p">)</span> <span class="s s-Atom">fby</span> <span class="s s-Atom">sum</span> <span class="o">+</span> <span class="nf">next</span><span class="p">(</span><span class="s s-Atom">input</span><span class="p">);</span>
<span class="s s-Atom">n</span> <span class="o">=</span> <span class="mi">1</span> <span class="s s-Atom">fby</span> <span class="s s-Atom">n</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
<span class="s s-Atom">running_avg</span> <span class="o">=</span> <span class="s s-Atom">sum</span> <span class="o">/</span> <span class="s s-Atom">n</span><span class="p">;</span>
<span class="s s-Atom">end</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Prime_numbers">Prime numbers</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Prime_number" title="Prime number">Prime number</a></div>
<div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre> <span class="s s-Atom">prime</span>
<span class="s s-Atom">where</span>
<span class="s s-Atom">prime</span> <span class="o">=</span> <span class="mi">2</span> <span class="nf">fby</span> <span class="p">(</span><span class="s s-Atom">n</span> <span class="s s-Atom">whenever</span> <span class="p">[[</span><span class="s s-Atom">isprime</span><span class="p">]](</span><span class="s s-Atom">n</span><span class="p">));</span>
<span class="s s-Atom">n</span> <span class="o">=</span> <span class="mi">3</span> <span class="s s-Atom">fby</span> <span class="s s-Atom">n</span><span class="o">+</span><span class="mi">1</span><span class="p">;</span>
<span class="nf">isprime</span><span class="p">(</span><span class="s s-Atom">n</span><span class="p">)</span> <span class="o">=</span> <span class="o">not</span><span class="p">(</span><span class="s s-Atom">divs</span><span class="p">)</span> <span class="s s-Atom">asa</span> <span class="s s-Atom">divs</span> <span class="s s-Atom">or</span> <span class="s s-Atom">prime</span><span class="o">*</span><span class="s s-Atom">prime</span> <span class="o">&gt;</span> <span class="nv">N</span>
<span class="s s-Atom">where</span>
<span class="nv">N</span> <span class="o">is</span> <span class="s s-Atom">current</span> <span class="s s-Atom">n</span><span class="p">;</span>
<span class="s s-Atom">divs</span> <span class="o">=</span> <span class="nv">N</span> <span class="o">mod</span> <span class="s s-Atom">prime</span> <span class="s s-Atom">eq</span> <span class="mi">0</span><span class="p">;</span>
<span class="s s-Atom">end</span><span class="p">;</span>
<span class="s s-Atom">end</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Dataflow_diagram">Dataflow diagram</h4></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Dataflow_diagram" class="mw-redirect" title="Dataflow diagram">Dataflow diagram</a></div>

<div class="mw-heading mw-heading3"><h3 id="Quick_sort">Quick sort</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Quick_sort" class="mw-redirect" title="Quick sort">Quick sort</a></div>
<div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre> <span class="nf">qsort</span><span class="p">(</span><span class="s s-Atom">a</span><span class="p">)</span> <span class="o">=</span> <span class="s s-Atom">if</span> <span class="nf">eof</span><span class="p">(</span><span class="s s-Atom">first</span> <span class="s s-Atom">a</span><span class="p">)</span> <span class="s s-Atom">then</span> <span class="p">{{</span><span class="o">not</span> <span class="s s-Atom">a</span> <span class="s s-Atom">typo</span><span class="p">|</span><span class="s s-Atom">a</span><span class="p">}}</span> <span class="s s-Atom">else</span> <span class="nf">follow</span><span class="p">(</span><span class="nf">qsort</span><span class="p">(</span><span class="s s-Atom">b0</span><span class="p">),</span><span class="nf">qsort</span><span class="p">(</span><span class="s s-Atom">b1</span><span class="p">))</span> <span class="s s-Atom">fi</span>
<span class="s s-Atom">where</span>
<span class="s s-Atom">p</span> <span class="o">=</span> <span class="s s-Atom">first</span> <span class="s s-Atom">a</span> <span class="o">&lt;</span> <span class="s s-Atom">a</span><span class="p">;</span>
<span class="s s-Atom">b0</span> <span class="o">=</span> <span class="s s-Atom">a</span> <span class="s s-Atom">whenever</span> <span class="s s-Atom">p</span><span class="p">;</span>
<span class="s s-Atom">b1</span> <span class="o">=</span> <span class="s s-Atom">a</span> <span class="s s-Atom">whenever</span> <span class="o">not</span> <span class="s s-Atom">p</span><span class="p">;</span>
<span class="nf">follow</span><span class="p">(</span><span class="s s-Atom">x</span><span class="p">,</span><span class="s s-Atom">y</span><span class="p">)</span> <span class="o">=</span> <span class="s s-Atom">if</span> <span class="s s-Atom">xdone</span> <span class="s s-Atom">then</span> <span class="s s-Atom">y</span> <span class="s s-Atom">upon</span> <span class="s s-Atom">xdone</span> <span class="s s-Atom">else</span> <span class="s s-Atom">x</span> <span class="s s-Atom">fi</span>
<span class="s s-Atom">where</span>
<span class="s s-Atom">xdone</span> <span class="o">=</span> <span class="s s-Atom">iseod</span> <span class="s s-Atom">x</span> <span class="s s-Atom">fby</span> <span class="s s-Atom">xdone</span> <span class="s s-Atom">or</span> <span class="s s-Atom">iseod</span> <span class="s s-Atom">x</span><span class="p">;</span>
<span class="s s-Atom">end</span>
<span class="s s-Atom">end</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Data_flow_diagram">Data flow diagram</h4></div>
<div class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr"><pre> --------&gt; whenever -----&gt; qsort ---------
| ^ |
| | |
| not |
| ^ |
|---&gt; first | |
| | | |
| V | |
|---&gt; less --- |
| | |
| V V
---+--------&gt; whenever -----&gt; qsort -----&gt; conc -------&gt; ifthenelse -----&gt;
| ^ ^
| | |
--------&gt; next ----&gt; first ------&gt; iseod -------------- |
| |
-----------------------------------------------------------
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Root_mean_square">Root mean square</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Root_mean_square" title="Root mean square">Root mean square</a></div>
<div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre> <span class="nf">sqroot</span><span class="p">(</span><span class="nf">avg</span><span class="p">(</span><span class="nf">square</span><span class="p">(</span><span class="s s-Atom">a</span><span class="p">)))</span>
<span class="s s-Atom">where</span>
<span class="nf">square</span><span class="p">(</span><span class="s s-Atom">x</span><span class="p">)</span> <span class="o">=</span> <span class="s s-Atom">x</span><span class="o">*</span><span class="s s-Atom">x</span><span class="p">;</span>
<span class="nf">avg</span><span class="p">(</span><span class="s s-Atom">y</span><span class="p">)</span> <span class="o">=</span> <span class="s s-Atom">mean</span>
<span class="s s-Atom">where</span>
<span class="s s-Atom">n</span> <span class="o">=</span> <span class="mi">1</span> <span class="s s-Atom">fby</span> <span class="s s-Atom">n</span><span class="o">+</span><span class="mi">1</span><span class="p">;</span>
<span class="s s-Atom">mean</span> <span class="o">=</span> <span class="s s-Atom">first</span> <span class="s s-Atom">y</span> <span class="s s-Atom">fby</span> <span class="s s-Atom">mean</span> <span class="o">+</span> <span class="s s-Atom">d</span><span class="p">;</span>
<span class="s s-Atom">d</span> <span class="o">=</span> <span class="p">(</span><span class="s s-Atom">next</span> <span class="s s-Atom">y</span> <span class="o">-</span> <span class="s s-Atom">mean</span><span class="p">)</span><span class="s s-Atom">/</span><span class="p">(</span><span class="s s-Atom">n</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span>
<span class="s s-Atom">end</span><span class="p">;</span>
<span class="nf">sqroot</span><span class="p">(</span><span class="s s-Atom">z</span><span class="p">)</span> <span class="o">=</span> <span class="s s-Atom">approx</span> <span class="s s-Atom">asa</span> <span class="s s-Atom">err</span> <span class="o">&lt;</span> <span class="mf">0.0001</span>
<span class="s s-Atom">where</span>
<span class="nv">Z</span> <span class="o">is</span> <span class="s s-Atom">current</span> <span class="s s-Atom">z</span><span class="p">;</span>
<span class="s s-Atom">approx</span> <span class="o">=</span> <span class="nv">Z</span><span class="o">/</span><span class="mi">2</span> <span class="nf">fby</span> <span class="p">(</span><span class="s s-Atom">approx</span> <span class="o">+</span> <span class="nv">Z</span><span class="o">/</span><span class="s s-Atom">approx</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="p">;</span>
<span class="s s-Atom">err</span> <span class="o">=</span> <span class="nf">abs</span><span class="p">(</span><span class="nf">square</span><span class="p">(</span><span class="s s-Atom">approx</span><span class="p">)</span><span class="o">-</span><span class="nv">Z</span><span class="p">);</span>
<span class="s s-Atom">end</span><span class="p">;</span>
<span class="s s-Atom">end</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Hamming_problem">Hamming problem</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Hamming_problem" class="mw-redirect" title="Hamming problem">Hamming problem</a></div>
<div class="mw-highlight mw-highlight-lang-prolog mw-content-ltr" dir="ltr"><pre> <span class="s s-Atom">h</span>
<span class="s s-Atom">where</span>
<span class="s s-Atom">h</span> <span class="o">=</span> <span class="mi">1</span> <span class="s s-Atom">fby</span> <span class="nf">merge</span><span class="p">(</span><span class="nf">merge</span><span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="s s-Atom">h</span><span class="p">,</span> <span class="mi">3</span> <span class="o">*</span> <span class="s s-Atom">h</span><span class="p">),</span> <span class="mi">5</span> <span class="o">*</span> <span class="s s-Atom">h</span><span class="p">);</span>
<span class="nf">merge</span><span class="p">(</span><span class="s s-Atom">x</span><span class="p">,</span><span class="s s-Atom">y</span><span class="p">)</span> <span class="o">=</span> <span class="s s-Atom">if</span> <span class="s s-Atom">xx</span> <span class="s s-Atom">&lt;=</span> <span class="s s-Atom">yy</span> <span class="s s-Atom">then</span> <span class="s s-Atom">xx</span> <span class="s s-Atom">else</span> <span class="s s-Atom">yy</span> <span class="s s-Atom">fi</span>
<span class="s s-Atom">where</span>
<span class="s s-Atom">xx</span> <span class="o">=</span> <span class="s s-Atom">x</span> <span class="s s-Atom">upon</span> <span class="s s-Atom">xx</span> <span class="s s-Atom">&lt;=</span> <span class="s s-Atom">yy</span><span class="p">;</span>
<span class="s s-Atom">yy</span> <span class="o">=</span> <span class="s s-Atom">y</span> <span class="s s-Atom">upon</span> <span class="s s-Atom">yy</span> <span class="s s-Atom">&lt;=</span> <span class="s s-Atom">xx</span><span class="p">;</span>
<span class="s s-Atom">end</span><span class="p">;</span>
<span class="s s-Atom">end</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Dataflow_Diagram_2">Dataflow Diagram</h4></div>

<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-book-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-book_1-0">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFWadgeAshcroft1985" class="citation book cs1">Wadge, William W.; Ashcroft, Edward A. (1985). <span class="id-lock-registration" title="Free registration required"><a rel="nofollow" class="external text" href="https://archive.org/details/luciddataflowpro00wadg_0"><i>Lucid, the Dataflow Programming Language</i></a></span>. Academic Press. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-12-729650-6</bdi><span class="reference-accessdate">. Retrieved <span class="nowrap">8 January</span> 2015</span>.</cite></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://code.google.com/p/plucid/">pLucid</a></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" ยท ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox authority-control" aria-labelledby="Authority_control_databases_frameless&amp;#124;text-top&amp;#124;10px&amp;#124;alt=Edit_this_at_Wikidata&amp;#124;link=https&amp;#58;//www.wikidata.org/wiki/Q3561750#identifiers&amp;#124;class=noprint&amp;#124;Edit_this_at_Wikidata645" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Authority_control_databases_frameless&amp;#124;text-top&amp;#124;10px&amp;#124;alt=Edit_this_at_Wikidata&amp;#124;link=https&amp;#58;//www.wikidata.org/wiki/Q3561750#identifiers&amp;#124;class=noprint&amp;#124;Edit_this_at_Wikidata645" style="font-size:114%;margin:0 4em">Authority control databases </div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">National</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh85078737">United States</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://www.nli.org.il/en/authorities/987007538681105171">Israel</a></span></li></ul></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://lux.collections.yale.edu/view/concept/4dc8cf88-d263-40fc-aaa2-df7794032102">Yale LUX</a></span></li></ul></div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-03-04" href="https://en.wikipedia.org/wiki/?title=Lucid_(programming_language)&amp;oldid=1278826650">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>